package com.baigao.springboot.controller;

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

@Controller
public class UploadFilesController {
    @Value("${file.path}")
    private String filePath;
// 
//    @RequestMapping("/upload")
//    @ResponseBody
//    public String upload(MultipartFile file) throws  Exception{
//        //a.jpg
//        String extName = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
// 
//        String fileName = UUID.randomUUID().toString() + extName;
// 
//        File file2 = new File(filePath + fileName);
//        if(!file2.exists()){
//            //先得到文件的上级目录，并创建上级目录，在创建文件
//            file2.getParentFile().mkdir();
//            
//            // 或  file2.mkdir();
//        }
//        FileCopyUtils.copy(file.getInputStream(), new FileOutputStream(new File(filePath + fileName)));
//        return fileName;
//    }
    
    /**
     * 上传文件
     * @param request
     * @param response
     * @param file 上传的文件，支持多文件
     * @throws Exception
     */
    @ResponseBody
    @RequestMapping("/insert")
    public Map<String, Object> insert(HttpServletRequest request,HttpServletResponse response
            ,@RequestParam("file") MultipartFile[] file) throws Exception{
    	
    	Map<String, Object> map = new HashMap<String, Object>();
    	
        if(file!=null&&file.length>0){
            //组合image名称，“;隔开”
            List<String> fileName =new ArrayList<String>();
 
            try {
                for (int i = 0; i < file.length; i++) {
                    if (!file[i].isEmpty()) {
 
                        //上传文件，随机名称，";"分号隔开
                        fileName.add(uploadImage(request, filePath, file[i], true));
                    }
                }
 
                //上传成功
                if(fileName!=null&&fileName.size()>0){
                    System.out.println("上传成功！"+fileName.toString());
                    
                    map.put("fileName", fileName);
                    map.put("msg", "上传成功！");
                    return map;
//                    Constants.printJson(response, fileName);;
                }else {
                    System.out.println("上传失败！文件格式错误！");
                    map.put("fileName", fileName);
                    map.put("msg", "上传失败！文件格式错误！");
                    return map;
                }
            } catch (Exception e) {
                e.printStackTrace();
                System.out.println("上传出现异常！异常出现在：class.UploadController.insert()");
                map.put("fileName", fileName);
                map.put("msg", "上传出现异常！异常出现在");
                return map;
            }
        }else {
        	System.out.println("没有检测到文件！");
        	map.put("fileName", "");
            map.put("msg", "没有检测到文件！");
            return map;
        }
    }
    
    /**
     * 上传图片
     *  原名称
     * @param request 请求
     * @param path_deposit 存放位置(路径)
     * @param file 文件
     * @param isRandomName 是否随机名称
     * @return 完整文件路径
     */
    public static String uploadImage(HttpServletRequest request,String path_deposit,MultipartFile file,boolean isRandomName) {
        //上传
        try {
            String[] typeImg={"gif","png","jpg"};
 
            if(file!=null){
                String origName=file.getOriginalFilename();// 文件原名称
                System.out.println("上传的文件原名称:"+origName);
                // 判断文件类型
                String type=origName.indexOf(".")!=-1?origName.substring(origName.lastIndexOf(".")+1, origName.length()):null;
                if (type!=null) {
                    boolean booIsType=false;
                    for (int i = 0; i < typeImg.length; i++) {
                        if (typeImg[i].equals(type.toLowerCase())) {
                            booIsType=true;
                        }
                    }
                    //类型正确
                    if (booIsType) {
                        //存放图片文件的路径
                        String path=path_deposit;
                        //组合名称
                        String fileSrc=""; 
                        //是否随机名称
                        if(isRandomName){
                            origName=UUID.randomUUID().toString()+origName.substring(origName.lastIndexOf("."));
                        }
                        //判断是否存在目录
                        File targetFile=new File(path);
                        if(!targetFile.exists()){
                            targetFile.mkdirs();//创建目录
                        }
                     // 文件保存路径  
                        String savePath = path + origName;  
                        // 转存文件  上传
                        file.transferTo(new File(savePath)); 
                        //完整路径
                        fileSrc=savePath;
                        System.out.println("图片上传成功:"+fileSrc);
                        return fileSrc;
                    }
                }
            }
            return null;
        }catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}
